// function objGroup(obj1, obj2) {
//     obj1.next = obj2
//     obj2.prev = obj1

//     return {
//         o1: obj1,
//         o2: obj2
//     }
// }

// let obj = objGroup({name: 'obj1'},{name:'obj2'})
// console.log(obj)‘

// // reference count
// const user1 = { age: 11 }
// const user2 = { age: 22 }
// const user3 = { age: 33 }

// const nameList = [ user1.age, user2.age, user3.age, ]

// function fn() {
//     const num1 = 1
//     const num2 = 2
// }

// fn()

// // 对象之间的循环引用
// function fn() {
//     const obj1 = {}
//     const obj2 = {}

//     // 引用计数算法没有办法回收
//     obj1.name = obj2
//     obj2.name = obj1

//     return 'lg is a coder'
// }

// fn()


// var fn1 = function() {
//     this.foo = function() {
//         console.log('111111')
//     }
// }
// let f1 = new fn1()

// // 使用原型链
// var fn2 = function() {}
// fn2.prototype.foo = function() {
//     console.log('222222')
// }
// let f1 = new fn2()

// function Person() {
//     this.name = 'icoder'
//     this.age = 18
//     this.getAge = function() {
//         return this.age
//     }
// }
// const p1 = new Person()
// const a = p1.getAge

// // JS不需属性的访问方法更优
// function Person() {
//     this.name = 'icoder'
//     this.age = 18
// }
// const p2 = new Person()
// const b = p2.age

// // 3中不同的循环方式对比
// var arrList = new Array(1, 2, 3, 4, 5, 6)
// arrList.forEach(function(item) {
//     console.log(item)
// })

// for (var i = arrList.length; i; i--) {
//     console.log(arrList[i])    
// }

// for(var i in arrList) {
//     console.log(arrList[i])
// }

// 字面量更优
var a = [1, 2, 3]

// new
var a1 = new Array(3)
a1[0] = 1
a1[1] = 2
a1[2] = 3
